home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #301 (1994)(Rhein-Sieg-Soft).zip / Franz PD Disk #301 (1994)(Rhein-Sieg-Soft).adf / AIFFpaint / AIFFpaint.ASC / AIFFpaint.ASC
Text File  |  1994-01-25  |  59KB  |  1,723 lines

  1. '
  2. '                               AIFFpaint  V1.42 
  3. '                              ------------------
  4. '                                ( 1 MegaByte )
  5. '
  6. '                                  27/01/1994
  7. '
  8. '                               Volker Stepprath 
  9. '                               Tegeler  Str.  7 
  10. '                               40789    Monheim 
  11. '                               G  E  R  M A N Y 
  12. '
  13. '                     AIFFpaint V1.42 is full public domain
  14. '  If you have good ideas for AIFFpaint, you can change it like you need it !  
  15. '      But please send me the new version of AIFFpaint VX.xx !  ( Thanx )
  16. '
  17. '
  18. '   Please read the AIFFpaint.Doc for more informations about this program ! 
  19. '
  20. '                      History:   V1.00 * 92 / V1.42 * 94
  21. '
  22. '
  23. '                      AIFFpaint V1.42 ©1994 by Testaware
  24. '
  25. Set Buffer 15
  26. Close Editor 
  27. Close Workbench 
  28. Request Off 
  29. '
  30. DEV$=Dir$
  31. '
  32. If Fast Free+Chip Free<300000
  33.    Screen Open 0,320,200,8,Lowres
  34.    Curs Off 
  35.    Hide 
  36.    Cls 0
  37.    Pen 3
  38.    Paper 0
  39.    Locate ,11
  40.    Centre "NOT ENOUGH MEMORY !"
  41.    While Mouse Key=0 and Asc(Inkey$)=0
  42.    Wend 
  43.    Request On 
  44.    End 
  45. End If 
  46. '
  47. Unpack 16 To 1
  48. Screen Display 1,128,246,,51
  49. Get Cblock 1,0,52,200,78
  50. Erase 16
  51. '
  52. Default Palette ,$FFF,$55F,$F80
  53. '
  54. Screen Open 2,320,16,64,Lowres
  55. Flash Off 
  56. Cls 0
  57. Screen Display 2,128,232,,
  58. '
  59. Screen Open 0,320,200,32,Lowres
  60. Flash Off 
  61. Cls 0
  62. Gr Writing 0
  63. Limit Mouse 
  64. '
  65. Dim DEFFARBE(63),RESFARBE(63),LSFILE$(150),LFONT$(150),DMASK(3)
  66. Global DEFFARBE(),RESFARBE(),LSFILE$(),LFONT$(),DMASK(),FARBE1,FARBE2
  67. Global DEV$,FILE$,FILEANZ#,FY#,FX#,FYX#,FPOS,FONTANZ,SFONT,DFONT$
  68. Global INDEX1,INDEX2,SCD,SCH,SCW,SCC,SCM,SCL,MALART,STATUS,COMPRESS
  69. Global GBOB,WBOB,HBOB,PBOB,ABOB,EBOB,XBB,YBB,SBOB,NBOB,BBOB
  70. Global GICO,PICO,NICO,BICO,XIC,YIC,SC0X,SC0Y,E,LINE$,PATTERN
  71. '
  72. FARBE1=$FFF
  73. MALART=1
  74. INDEX1=1
  75. GBOB=1
  76. WBOB=32
  77. HBOB=32
  78. SBOB=6
  79. GICO=1
  80. DMASK(0)=1
  81. '
  82. SCD=246
  83. SCH=Screen Height
  84. SCW=Screen Width
  85. SCC=Screen Colour
  86. SCM=0
  87. SCL=0
  88. COMPRESS=1
  89. '
  90. For I=0 To 31
  91.    DEFFARBE(I)=Colour(I)
  92. Next 
  93. '
  94. LINE$="1111111111111111"
  95. '
  96. Change Mouse 2
  97. Limit Mouse 128,42 To X Hard(0,SCW),Y Hard(0,SCH)
  98. Get Block 1,0,0,Screen Width,Screen Height
  99. '
  100. Do 
  101.    MENU
  102.    MAIN
  103. Loop 
  104. '
  105. Procedure MAIN
  106. MAIN:
  107.    Screen 0 : Limit Mouse 128,42 To SCW+127,SCH+41
  108.    On Error Proc FEHLER
  109.    Do 
  110.       Clear Key : A$="" : N=0 : MK=0 : Screen 0
  111.       If MALART=13 Then Get Block 1,0,0,Screen Width,Screen Height : Gosub MA13
  112.       Limit Mouse 
  113.       While MK=0 and N=0
  114.          If Scin(X Mouse,Y Mouse)>0 Then Pop Proc
  115.          N=Asc(Upper$(Inkey$)) : MK=Mouse Key
  116.          If N<>0
  117.             If N=77 : MALART=1 : End If : Rem -M 
  118.             If N=68 : MALART=2 : End If : Rem -D 
  119.             If N=76 : MALART=3 : End If : Rem -L 
  120.             If N=83 : MALART=4 : End If : Rem -S 
  121.             If N=82 : MALART=5 : End If : Rem -R 
  122.             If N=75 : MALART=6 : End If : Rem -K 
  123.             If N=79 : MALART=7 : End If : Rem -O 
  124.             If N=69 : MALART=8 : End If : Rem -E 
  125.             If N=71 : MALART=9 : End If : Rem -G 
  126.             If N=70 : MALART=10 : End If : Rem -F 
  127.             If N=84 : MALART=11 : End If : Rem -T 
  128.             If N=86 : MALART=12 : End If : Rem -V 
  129.             If N=67 : MALART=13 : Get Block 1,0,0,Screen Width,Screen Height : Gosub MA13 : End If : Rem -C 
  130.             If N=85 : Put Block 1,0,0 : End If : Rem -U 
  131.             If N=81 : Cls 0 : End If : Rem -Q 
  132.             If N=80
  133.                Screen To Front 2 : Screen Show 2 : Screen 2 : N=0 : MK=0
  134.                While N=0
  135.                   N=Asc(Upper$(Inkey$))
  136.                   MK=Mouse Key
  137.                   If MK
  138.                      X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  139.                   If MK=2 : INDEX2=Point(X,Y) Else INDEX1=Point(X,Y) : End If 
  140.                      FARBE1=Colour(INDEX1) : FARBE2=Colour(INDEX2)
  141.                      Screen 1 : Colour 3,FARBE1 : Colour 4,FARBE2 : Screen 2
  142.                   End If 
  143.                Wend 
  144.                Screen To Back 2 : Screen Hide 2 : Screen 0 : Ink INDEX1,INDEX2 : N=0 : MK=0 : Goto MAIN
  145.             End If 
  146.             Clear Key 
  147.          End If 
  148.          Multi Wait 
  149.       Wend 
  150.       If N>27 and N<32
  151.          Repeat 
  152.             If N=28 and SC0X<SCW-250 : Inc SC0X : End If 
  153.             If N=29 and SC0X>1 : Dec SC0X : End If 
  154.             If N=30 and SC0Y>0 : Dec SC0Y : End If 
  155.             If N=31 and SC0Y<SCH-256 : Inc SC0Y : End If 
  156.             Screen Offset 0,SC0X,SC0Y
  157.             N=Asc(Inkey$)
  158.          Until N=0
  159.          N=0 : MK=0 : Clear Key 
  160.       End If 
  161.       If MK
  162.          Get Block 1,0,0,Screen Width,Screen Height
  163.       If MK=2 : INDEXA=INDEX2 : INDEXB=INDEX2 Else INDEXA=INDEX1 : INDEXB=INDEX2 : End If 
  164.          Ink INDEXA,INDEXB
  165.          On MALART Gosub MA1,MA2,MA3,MA4,MA5,MA6,MA7,MA8,MA9,MA10,MA11,MA12,MA13
  166.       Else 
  167.          If N=32
  168.             Y Mouse=Y Screen(2)
  169.             Pop Proc
  170.          End If 
  171.       End If 
  172.    Loop 
  173.    '
  174. MA1:
  175.    XX=X Mouse : YY=Y Mouse
  176.    Repeat 
  177.       X=X Mouse : Y=Y Mouse
  178.       N1=X Screen(0,XX) : N2=X Screen(0,X)
  179.       N3=Y Screen(0,YY) : N4=Y Screen(0,Y)
  180.       Draw N2,N4 To N1,N3
  181.       XX=X : YY=Y
  182.    Until Mouse Key=0
  183.    Return 
  184.    '
  185. MA2:
  186.    Repeat 
  187.       Plot X Screen(X Mouse),Y Screen(Y Mouse)
  188.    Until Mouse Key=0
  189.    Return 
  190.    '
  191. MA3:
  192.    XX=X Screen(X Mouse) : YY=Y Screen(Y Mouse)
  193.    Repeat 
  194.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  195.       Draw XX,YY To X,Y
  196.       While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) : Wend 
  197.       Put Block 1,0,0
  198.    Until Mouse Key=0
  199.    Draw XX,YY To X,Y
  200.    Return 
  201.    '
  202. MA4:
  203.    XX=X Screen(X Mouse) : YY=Y Screen(Y Mouse)
  204.    Repeat 
  205.       Draw XX,YY To X Screen(X Mouse),Y Screen(Y Mouse)
  206.    Until Mouse Key=0
  207.    Return 
  208.    '
  209. MA5:
  210.    While Mouse Key<>0 : Wend 
  211.    Gosub XYKREUZ
  212.    While Mouse Key
  213.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  214.       Box XX,YY To X,Y
  215.       While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) : Wend 
  216.       Put Block 1,0,0
  217.    Wend 
  218.    Box XX,YY To X,Y
  219.    Return 
  220.    '
  221. MA6:
  222.    While Mouse Key<>0 : Wend 
  223.    Gosub XYKREUZ
  224.    While Mouse Key
  225.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  226.       If X<=XX Then X=XX+1
  227.       If Y<=YY Then Y=YY+1
  228.       Bar XX,YY To X,Y
  229.       While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) : Wend 
  230.       Put Block 1,0,0
  231.    Wend 
  232.    Bar XX,YY To X,Y
  233.    Return 
  234.    '
  235. MA7:
  236.    Gosub XYKREUZ
  237.    Repeat 
  238.       X=X Screen(X Mouse)-XX
  239.       If X<1 Then X=1
  240.       Circle XX,YY,X
  241.       While X=X Screen(X Mouse)-XX : Wend 
  242.       Put Block 1,0,0
  243.    Until Mouse Key=0
  244.    Circle XX,YY,X
  245.    Return 
  246.    '
  247. MA8:
  248.    Gosub XYKREUZ
  249.    Repeat 
  250.       X=X Screen(X Mouse)-XX : Y=Y Screen(Y Mouse)-YY
  251.       If X<1 Then X=1
  252.       If Y<1 Then Y=1
  253.       Ellipse XX,YY,X,Y
  254.       While X=X Screen(X Mouse)-XX and Y=Y Screen(Y Mouse)-YY : Wend 
  255.       Put Block 1,0,0
  256.    Until Mouse Key=0
  257.    Ellipse XX,YY,X,Y
  258.    Return 
  259.    '
  260. MA9:
  261.    Repeat 
  262.       X=X Screen(X Mouse)-Rnd(10) : Y=Y Screen(Y Mouse)-Rnd(10)
  263.       For I=1 To 10 : Plot X+Rnd(10),Y+Rnd(10) : Next 
  264.    Until Mouse Key=0
  265.    Return 
  266.    '
  267. MA10:
  268.    Paint X Screen(X Mouse),Y Screen(Y Mouse),1
  269.    Return 
  270.    '
  271. MA11:
  272.    Gosub XYKREUZ
  273.    Repeat 
  274.       N1=0 : While N1=0 : N1=Asc(Inkey$) : Wend 
  275.       If N1=8 and Len(N$)>0 : N$=Left$(N$,Len(N$)-1) : Put Block 1,0,0 : End If 
  276.       If N1>31 : N$=N$+Chr$(N1) : End If 
  277.       Text XX,YY+3,N$ : Clear Key 
  278.    Until N1=13
  279.    N$=""
  280.    Return 
  281.    '
  282. MA12:
  283.    Repeat : Until Mouse Key=0 : While Inkey$<>"" : Wend 
  284.    N1=0 : XLMAX=SCW-64 : YLMAX=SCH-30 : Ink 1
  285.    Repeat 
  286.       X=Min(XLMAX,X Screen(X Mouse)) : Y=Min(YLMAX,Y Screen(Y Mouse)) : X=Max(0,X) : Y=Max(0,Y)
  287.       Box X,Y To X+64,Y+30 : A=0
  288.       While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) and Mouse Key=0 : Wend 
  289.       Put Block 1,0,0
  290.    Until Mouse Key<>0
  291.    Screen Open 3,320,152,SCC,0 : Flash Off : Cls 0 : Get Palette 0 : LSCD=152 : Screen Display 3,128,152,,150
  292.    Change Mouse 3 : Zoom 0,X,Y,X+64,Y+30 To 3,0,0,320,150 : Change Mouse 2
  293.    Get Block 3,0,0,320,150 : Ink INDEX1
  294.    Repeat 
  295.       Clear Key : X2=X Screen(X Mouse)/5*5 : Y2=Y Screen(Y Mouse)/5*5 : SC=Scin(X Mouse,Y Mouse) : N1=0 : MK=0
  296.       Bar X2,Y2 To X2+4,Y2+4
  297.       While X2=X Screen(X Mouse)/5*5 and Y2=Y Screen(Y Mouse)/5*5 and MK=0 and N1=0 : N1=Asc(Inkey$) : MK=Mouse Key : Wend 
  298.       If SC=3 and MK<>0 and N1=0
  299.       If MK=2 : INDEX=INDEX2 Else INDEX=INDEX1 : End If 
  300.          Screen 0 : Ink INDEX : Screen 3 : Ink INDEX
  301.          While Mouse Key<>0 and Scin(X Mouse,Y Mouse)=3
  302.             X2=X Screen(X Mouse)/5*5 : Y2=Y Screen(Y Mouse)/5*5
  303.             Bar X2,Y2 To X2+4,Y2+4 : Get Block 3,0,0,320,150
  304.             Screen 0 : Plot X2/5+X,Y2/5+Y : Screen 3
  305.          Wend 
  306.       End If 
  307.       Put Block 3,0,0
  308.       If N1<>0
  309.          If N1=30 and LSCD>-112 : Add LSCD,-8 : Screen Display 3,128,LSCD,, : End If 
  310.          If N1=31 and LSCD<304 : Add LSCD,8 : Screen Display 3,128,LSCD,, : End If 
  311.       End If 
  312.       Screen 3 : Ink INDEXA
  313.    Until N1=32
  314.    Screen Close 3 : Del Block 3 : Screen 0
  315.    Return 
  316.    '
  317. MA13:
  318.    If STATUS=0
  319.       Gosub XYKREUZ : Ink 1
  320.       While Mouse Key
  321.          X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  322.          If X<=XX : X=XX+1 : End If 
  323.          If Y<=YY : Y=YY+1 : End If 
  324.          Box XX,YY To X,Y
  325.          While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) : Wend 
  326.          Put Block 1,0,0
  327.       Wend 
  328.       Get Block 2,XX,YY,X-XX,Y-YY,1 : STATUS=1
  329.    End If 
  330.    If STATUS
  331.       Do 
  332.          X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  333.          Put Block 1,0,0 : Put Block 2,X,Y
  334.          While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) and Mouse Key=0
  335.             A$=Inkey$
  336.             If A$<>""
  337.                N=Scancode : Clear Key 
  338.                If N=64
  339.                   N=MALART
  340.                   Put Block 1,0,0 : MENU
  341.                If N<>MALART : Goto MAIN Else Put Block 2,X Screen(X Mouse),Y Screen(Y Mouse) : End If 
  342.                End If 
  343.                If N=21 : Vrev Block 2 : Hrev Block 2 : End If 
  344.                If N=49 : Vrev Block 2 : End If 
  345.                If N=50 : Hrev Block 2 : End If 
  346.                If N=53 : Put Block 1,0,0 : STATUS=0 : Goto MA13 : End If 
  347.                Put Block 1,0,0 : Put Block 2,X Screen(X Mouse),Y Screen(Y Mouse)
  348.             End If 
  349.          Wend 
  350.          While Mouse Key<>0 : Get Block 1,0,0,Screen Width,Screen Height : Put Block 1,0,0 : Put Block 2,X,Y : Wend 
  351.       Loop 
  352.    End If 
  353.    Return 
  354.    '
  355. XYKREUZ:
  356.    While Mouse Key<>0 : Wend : Ink 1,1
  357.    Repeat 
  358.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  359.       Draw X,0 To X,SCH : Draw 0,Y To SCW,Y
  360.       While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) and Mouse Key=0 : Wend 
  361.       Put Block 1,0,0
  362.       A$=Inkey$ : If A$=" " : MENU : Goto MAIN : End If 
  363.    Until Mouse Key
  364.    XX=X : YY=Y : Ink INDEXA,INDEXB
  365.    Return 
  366. End Proc
  367. Procedure MENU
  368.    Limit Mouse 128,42 To X Hard(1,640),Y Hard(1,256)
  369.    Clear Key : Screen To Front 2 : Screen To Front 1
  370.    N=320/SCC
  371.    Screen 2 : For I=0 To SCC : Ink I : Bar I*N,0 To I*N+N-1,12 : Next 
  372.    For I=0 To 31 : RESFARBE(I)=Colour(I) : Next 
  373.    Screen 1 : Gosub MENU_A : Screen Show 1 : Screen Show 2
  374.    Do 
  375.       MK=0
  376.       While MK=0 and Asc(A$)<>32
  377.          A$=Inkey$
  378.          MK=Mouse Key
  379.          If Scin(X Mouse,Y Mouse)=0 Then Screen 0 : Pop Proc
  380.          Multi Wait 
  381.       Wend 
  382.       X=X Mouse : Y=(Y Mouse) : N=Scin(X,Y) : E=0
  383.       If A$=" " Then Screen To Front 0 : Screen 0 : Screen Hide 1 : Screen Hide 2 : Pop Proc
  384.       If N>0 : Screen N : X=X Screen(X) : Y=Y Screen(Y) : End If 
  385.       If MK>1 and N=2 : INDEX2=Point(X,Y) : FARBE2=Colour(INDEX2) : Screen 1 : Colour 4,FARBE2 : N=0 : End If 
  386.       If N=1
  387.          '
  388.          If X<221 and Y<7
  389.             X=X/28
  390.             Add SCD,X*26,64 To 248
  391.             Ink 0 : Bar 2,2 To 219,5 : Ink 2 : Bar X*28+2,2 To X*28+22,4
  392.             SCD=X*26+64
  393.             Screen Display 1,128,SCD,, : Screen Display 2,128,SCD-14,,
  394.             Y Mouse=X*28+67-(X*2)
  395.          End If 
  396.          '
  397.          If X<220 and Y>8 and Y<36
  398.             X=X/28 : Y=(Y-9)/12 : N1=MALART-1
  399.             For I=0 To 7 : G[I*28,9,I*28+25,21,0] : G[I*28,23,I*28+25,35,0] : Next 
  400.             If Y=0
  401.                G[X*28,9,X*28+25,21,1] : G[140,23,165,35,1]
  402.             End If 
  403.             If Y=1 and X<>5
  404.                G[X*28,23,X*28+25,35,1]
  405.             If X=4 : G[140,23,165,35,0] Else G[140,23,165,35,1] : End If 
  406.             End If 
  407.             If Y=1 and X=5
  408.                G[140,23,165,35,1]
  409.                G[112,23,137,35,0]
  410.                If N1=12 : N1=0 : End If 
  411.             If N1>8 : X=N1-8 : G[X*28,23,X*28+25,35,1] : Y=1 Else X=N1 : G[X*28,9,X*28+25,21,1] : Y=0 : End If 
  412.             End If 
  413.             MALART=X+1+Y*8
  414.             If MALART=15
  415.                MALART=N1+1 : Screen 0 : Put Block 1,0,0 : Wait 10 : Screen 1 : G[168,23,193,35,0]
  416.             If MALART>8 : Add N1,-8 : G[N1*28,23,N1*28+25,35,1] Else G[N1*28,9,N1*28+25,21,1] : End If 
  417.             End If 
  418.             If MALART=16
  419.                MALART=N1+1 : Screen 0 : Get Block 1,0,0,Screen Width,Screen Height : Cls 0 : Wait 10 : Screen 1 : G[196,23,221,35,0]
  420.             If MALART>8 : Add N1,-8 : G[N1*28,23,N1*28+25,35,1] Else G[N1*28,9,N1*28+25,21,1] : End If 
  421.             End If 
  422.             X=0 : Y=0 : While Mouse Key<>0 : Wend 
  423.          End If 
  424.          '
  425.          If Y>37 and Y<50
  426.             For I=0 To 4 : G[I*128+1,38,I*128+126,49,0] : Next 
  427.             X=X/128 : G[X*128+1,38,X*128+126,49,1]
  428.             On X+1 Proc PROMENU,FONTMENU,AMOSBOBMENU,AMOSICONMENU,OPTIONEN
  429.             G[X*128+1,38,X*128+126,49,0] : Gosub MENU_A
  430.             X=0 : Y=0
  431.          End If 
  432.          '
  433.          '* Farbwerte ändern  
  434.          '* ----------------  
  435.          If X>230 and X<480 and Y>13 and Y<35
  436.             Add Y,-12 : Y=Y/8+1
  437.             Add X,-227 : X=X/16
  438.             N1$=Hex$(X)-"$"
  439.             N$=Hex$(FARBE1,3)-"$"
  440.             Mid$(N$,Y,1)=N1$
  441.             N$="$"+N$
  442.             FARBE1=Val(N$)
  443.             Gosub MENU_A
  444.             Screen 0
  445.             Colour INDEX1,FARBE1
  446.             Screen 2 : Colour INDEX1,FARBE1
  447.             Screen 1 : Colour 3,FARBE1
  448.             If INDEX1=INDEX2 : Colour 4,FARBE1 : End If 
  449.          End If 
  450.          '  
  451.          If X>558 and Y<36
  452.             If Y<9
  453.                G[558,0,639,8,1]
  454.                Screen 0 : For I=0 To 31 : Colour I,DEFFARBE(I) : Next 
  455.                Screen 2 : Get Palette 0
  456.                Wait 10 : Screen 1 : Colour 3,DEFFARBE(INDEX1) : Colour 4,DEFFARBE(INDEX2) : FARBE1=Colour(3) : Gosub MENU_A : G[558,0,639,8,0]
  457.             End If 
  458.             If Y>8 and Y<18
  459.                G[558,9,639,17,1]
  460.                Screen 0 : For I=0 To 31 : Colour I,RESFARBE(I) : Next 
  461.                Screen 2 : Get Palette 0
  462.                Wait 10 : Screen 1 : Colour 3,RESFARBE(INDEX1) : Colour 4,RESFARBE(INDEX2) : FARBE1=Colour(3) : Gosub MENU_A : G[558,9,639,17,0]
  463.             End If 
  464.             If Y>17 and Y<27
  465.                Screen 2
  466.                For I=0 To 31
  467.                   N$=Hex$(Colour(I),3)-"$"
  468.                   N1$=Left$(N$,1) : N2$=Mid$(N$,2,1) : N3$=Right$(N$,1)
  469.                   N1=Val("$"+N1$) : N2=Val("$"+N2$) : N3=Val("$"+N3$)
  470.                   N=N1+N2+N3 : N=Max(1,N) : N=N/3 : N1$=Hex$(N,1)-"$" : N$="" : N$=N1$+N1$+N1$ : N=Val("$"+N$)
  471.                   Colour I,N
  472.                Next I
  473.                If X>559 and X<573 : N=$200 : End If 
  474.                If X>573 and X<585 : N=$20 : End If 
  475.                If X>585 and X<603 : N=$2 : End If 
  476.                If X>603 and X<617 : N=$100 : End If 
  477.                If X>617 and X<640 : N=0 : End If 
  478.                For I=0 To 31 : N1=Colour(I) : Add N1,N : N1=Min(4095,N1) : Colour I,N1 : Next I
  479.                FARBE1=Colour(INDEX1) : FARBE2=Colour(INDEX2) : Screen 0 : Get Palette 2 : Screen 1 : Colour 3,FARBE1 : Colour 4,FARBE2 : Gosub MENU_A
  480.             End If 
  481.             '  
  482.             If Y>26 and Y<36 and X>597
  483.                G[598,27,638,35,1]
  484.                LADEFARBEN
  485.                G[598,27,638,35,0]
  486.             End If 
  487.          End If 
  488.       End If 
  489.       '
  490.       If X>558 and X<597 and Y>26 and Y<36
  491.          G[558,27,596,35,1] : N=Colour(3)
  492.          Repeat : While Mouse Key=0 : Wend : N1=Scin(X Mouse,Y Mouse) : Until N1=2
  493.          Screen 2 : N1=Point(X Screen(X Mouse),Y Screen(Y Mouse))
  494.          If N1>31 : Add N1,-31 : End If 
  495.          Colour N1,N : Screen 0 : Get Palette 2 : FARBE1=Colour(INDEX1) : FARBE2=Colour(INDEX2) : Screen 1 : Colour 3,FARBE1 : Colour 4,FARBE2
  496.          Gosub MENU_A : N=0 : G[558,27,596,35,0]
  497.       End If 
  498.       '
  499.       If N=2
  500.          INDEX1=Point(X,Y) : FARBE1=Colour(INDEX1)
  501.          Screen 1 : Colour 3,FARBE1
  502.          Gosub MENU_A
  503.       End If 
  504.       '
  505.       Repeat : Until Mouse Key=0
  506.    Loop 
  507.    '
  508. MENU_A:
  509.    N$=Hex$(FARBE1,3)-"$"
  510.    N=Varptr(N$)
  511.    N1=Peek(N) : If N1>64 Then Add N1,-55 Else Add N1,-48
  512.    N2=Peek(N+1) : If N2>64 Then Add N2,-55 Else Add N2,-48
  513.    N3=Peek(N+2) : If N3>64 Then Add N3,-55 Else Add N3,-48
  514.    Ink 0 : Bar 231,14 To 479,17 : Ink 2 : Bar 231,14 To Min(476,N1*16+239),17
  515.    Ink 0 : Bar 231,22 To 479,25 : Ink 2 : Bar 231,22 To Min(476,N2*16+239),25
  516.    Ink 0 : Bar 231,30 To 479,33 : Ink 2 : Bar 231,30 To Min(476,N3*16+239),33
  517.    For I=0 To 15
  518.       If I=N1 or I=N2 or I=N3 Then N=1 Else N=0
  519.       G[I*16+227,0,I*16+240,10,N]
  520.    Next I
  521.    N$="" : If INDEX1<10 Then N$="0"+Str$(INDEX1) Else N$=Str$(INDEX1)
  522.    Ink 2,0 : Text 533,8,N$-" " : If INDEX1>31 Then Add INDEX1,-31
  523.    Return 
  524. End Proc
  525. Procedure PROMENU
  526.    Ink 0 : Bar 0,52 To 640,164
  527.    For I=0 To 21
  528.       Read X,Y,X2,Y2,N1,N2,N$
  529.       Ink 2,0 : Text N1,N2,N$ : G[X,Y,X2,Y2,0]
  530.    Next I
  531.    '
  532.    Gosub PROMENU_A
  533.    LD_SV[384]
  534.    '
  535.    SCW2=SCW : SCH2=SCH : SCC2=SCC : SCM2=SCM : SCL2=SCL
  536.    '
  537.    On Error Proc FEHLER
  538.    '
  539.    Do 
  540.       While Mouse Key=0 : Multi Wait : Wend 
  541.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : E=0
  542.       '
  543.       If Y>65 and Y<78
  544.          '* Load PIC
  545.          '* --------
  546.          If X>0 and X<93
  547.             G[0,66,92,77,1]
  548.             If Len(FILE$)>0
  549.                If Exist(FILE$)
  550.                   Open Random 1,FILE$
  551.                   If E=0
  552.                      Field 1,20 As N$
  553.                      Get 1,1
  554.                   Close 1
  555.                   End If 
  556.                   If Instr(N$,"FORM")>0
  557.                      Load Iff FILE$,0
  558.                   Else 
  559.                      E=True
  560.                   End If 
  561.                   If Instr(N$,"Pac.Pic")>0 and E=True
  562.                      E=0
  563.                      Load FILE$,15
  564.                      Unpack 15 To 0
  565.                      Erase 15
  566.                   End If 
  567.                Else 
  568.                   E=True
  569.                End If 
  570.             Else 
  571.                E=True
  572.             End If 
  573.             If E=0
  574.                SCW=Screen Width
  575.                SCH=Screen Height
  576.                SCC=Min(64,Screen Colour)
  577.                SC0X=0
  578.                SC0Y=0
  579.                Get Block 1,0,0,Screen Width,Screen Height
  580.                Screen 0
  581.                N=Screen Base+72
  582.                N1=Deek(N)
  583.                If Btst(2,N1)
  584.                   SCL=Laced
  585.                Else 
  586.                   SCL=0
  587.                End If 
  588.                If Btst(15,N1)
  589.                   SCM=Hires
  590.                Else 
  591.                   SCM=Lowres
  592.                End If 
  593.                For I=0 To SCC-1
  594.                   RESFARBE(I)=Colour(I)
  595.                Next I
  596.                Set Line Val("%"+LINE$)
  597.                For I=1 To 3
  598.                   Add N,DMASK(I)
  599.                Next 
  600.                Gr Writing N
  601.                Set Pattern PATTERN
  602.                Screen 2
  603.                Get Palette 0
  604.                INDEX1=1
  605.                INDEX2=0
  606.                FARBE1=Colour(INDEX1)
  607.                FARBE2=Colour(INDEX2)
  608.                N=320/SCC
  609.                For I=0 To SCC
  610.                   Ink I : Bar I*N,0 To I*N+N,12
  611.                Next 
  612.                Screen 1
  613.                Colour 3,FARBE1
  614.                Colour 4,FARBE2
  615.                Screen To Back 0
  616.                Screen Display 1,128,SCD,,51
  617.                Screen Display 2,128,SCD-14,,
  618.                Pop Proc
  619.             End If 
  620.             Screen 1
  621.             G[0,66,92,77,0]
  622.          End If 
  623.          '
  624.          '* Save IFF
  625.          '* --------
  626.          If X>94 and X<166
  627.             G[94,66,166,77,1]
  628.             If Len(FILE$)
  629.                Screen 0
  630.                Save Iff FILE$,COMPRESS
  631.                SETCOMMENT["IFF-Picture"]
  632.                Screen 1
  633.             End If 
  634.             G[94,66,166,77,0]
  635.          End If 
  636.          '  
  637.          '* Compression 0/1 
  638.          '* --------------- 
  639.          If X>168 and X<186
  640.             G[168,66,186,77,1]
  641.             Add COMPRESS,1,0 To 1
  642.             Ink 2 : Text 173,74,Str$(COMPRESS)-" "
  643.             Wait 10
  644.             G[168,66,186,77,0]
  645.          End If 
  646.          '  
  647.          '* Save ABK
  648.          '* --------
  649.          If X>188 and X<280
  650.             G[188,66,280,77,1]
  651.             If Len(FILE$)
  652.                Spack 0 To 15
  653.                Save FILE$,15
  654.                SETCOMMENT["ABK-Picture"]
  655.                Erase 15
  656.                Screen 1
  657.             End If 
  658.             G[188,66,280,77,0]
  659.          End If 
  660.          '
  661.          '* Delete
  662.          '* ------
  663.          If X>282 and X<382
  664.             G[282,66,382,77,1]
  665.             If Len(FILE$)
  666.                If Exist(FILE$)
  667.                   Kill FILE$
  668.                End If 
  669.                Screen 1
  670.             End If 
  671.             G[282,66,382,77,0]
  672.          End If 
  673.          '
  674.          If X<382 : X=-1 : Y=-1 : End If 
  675.       End If 
  676.       '
  677.       If Y>95 and Y<108
  678.          If X>0 and X<127 : SCM=0 : Gosub PROMENU_A : End If 
  679.          If X>127 and X<255 : SCM=$8000 : Gosub PROMENU_A : End If 
  680.          If X>255 and X<383
  681.             If SCL=Laced : SCL=0 Else SCL=Laced : End If 
  682.             Gosub PROMENU_A
  683.          End If 
  684.       End If 
  685.       If Y>109 and Y<122
  686.          If X>0 and X<127 : N=83 : I=0 : N1=SCW : Gosub PROMENU_B : SCW=N1 : End If 
  687.          If X>127 and X<255 : N=212 : I=1 : N1=SCH : Gosub PROMENU_B : SCH=N1 : End If 
  688.          If X>255 and X<383 : N=340 : I=3 : N1=SCC : Gosub PROMENU_B : SCC=N1 : End If 
  689.       End If 
  690.       If Y>125 and Y<138
  691.          If X>0 and X<127 : G[0,126,126,137,1] : Screen To Front 0 : Screen 0 : Get Block 1,0,0,SCW2,SCH2 : Hrev Block 1 : Put Block 1,0,0 : Wait 50 : Screen To Back 0 : Screen 1 : G[0,126,126,137,0] : End If 
  692.          If X>127 and X<255 : G[128,126,254,137,1] : Screen To Front 0 : Screen 0 : Get Block 1,0,0,SCW2,SCH2 : Vrev Block 1 : Put Block 1,0,0 : Wait 50 : Screen To Back 0 : Screen 1 : G[128,126,254,137,0] : End If 
  693.          If X>255 and X<383 : G[256,126,382,137,1] : Screen To Front 0 : Screen 0 : Get Block 1,0,0,SCW2,SCH2 : Hrev Block 1 : Vrev Block 1 : Put Block 1,0,0 : Wait 50 : Screen To Back 0 : Screen 1 : G[256,126,382,137,0] : End If 
  694.       End If 
  695.       '
  696.       '* Use 
  697.       '* --- 
  698.       If Y>151 and Y<164
  699.          If X<127
  700.             G[1,152,126,163,1] : Wait 20
  701.             If SCW<>SCW2 or SCH<>SCH2 or SCC<>SCC2 or SCM<>SCM2 or SCL<>SCL2
  702.                If SCM>4 and SCC>15 : SCC=16 : End If 
  703.                Screen Open 3,SCW2,SCH2,SCC2,SCM2
  704.                Flash Off 
  705.                Get Palette 0
  706.                Screen 3
  707.                Cls 0
  708.                Screen Copy 0,0,0,SCW2,SCH2 To 3,0,0
  709.                If E=0
  710.                   Screen Close 0
  711.                   Screen Open 0,SCW,SCH,SCC,SCM+SCL
  712.                   Flash Off 
  713.                   Get Palette 3
  714.                   Cls 0
  715.                   Screen Copy 3,0,0,SCW2,SCH2 To 0,0,0
  716.                   Screen Close 3 : SC0X=0 : SC0Y=0 : SCC=Min(64,SCC)
  717.                   Screen 2 : N=320/SCC
  718.                   For I=0 To SCC
  719.                      Ink I : Bar I*N,0 To I*N+N,12
  720.                   Next 
  721.                   FARBE1=Colour(1)
  722.                   FARBE2=Colour(0)
  723.                   INDEX1=1
  724.                   INDEX2=0
  725.                   Screen 1
  726.                   Colour 3,FARBE1
  727.                   Colour 4,FARBE2
  728.                   Screen 0
  729.                   Set Line Val("%"+LINE$)
  730.                   For I=1 To 3
  731.                      Add N,DMASK(I)
  732.                   Next 
  733.                   Gr Writing N
  734.                   Set Pattern PATTERN
  735.                End If 
  736.             Else 
  737.                SCW=SCW2 : SCH=SCH2 : SCC=SCC2 : SCM=SCM2 : SCL=SCL2
  738.             End If 
  739.             Screen 0 : N=0 : Set Line Val("%"+LINE$) : For I=1 To 3 : Add N,DMASK(I) : Next : Gr Writing N : Set Pattern PATTERN
  740.             Screen 1 : Screen Display 1,128,SCD,,51 : Screen Display 2,128,SCD-14,, : Screen To Back 0 : E=0 : Pop Proc
  741.          End If 
  742.          '
  743.          '* About 
  744.          '* ----- 
  745.          If X>127 and X<255
  746.             G[128,152,254,163,1]
  747.             Ink 0 : Bar 383,52 To 640,163
  748.             G[384,52,639,163,1]
  749.             Put Cblock 1,416,55
  750.             Ink 1 : Text 430,89,"© 92/94 by Testaware"
  751.             Text 482,103,"Author:"
  752.             Text 446,113,"Volker Stepprath"
  753.             Text 446,121,"Tegeler  Str.  7"
  754.             Text 446,129,"40789    Monheim"
  755.             Text 446,137,"G  E  R  M A N Y"
  756.             Ink 2 : Text 414,158,"Available memory:"+Str$(Chip Free+Fast Free)
  757.             Wait 50
  758.             While Mouse Key<>0 : Wend 
  759.             While Mouse Key=0 : Wend 
  760.             G[128,152,254,163,0]
  761.             LD_SV[384]
  762.          End If 
  763.          '
  764.          '* Exit AIFFpaint
  765.          '* --------------
  766.          If X>255 and X<383
  767.             G[256,152,382,163,1]
  768.             Wait 40
  769.             Erase 1
  770.             Erase 2
  771.             Del Block 1
  772.             Screen Close 0
  773.             Screen Close 2
  774.             Fade 1 : Wait 30
  775.             Screen Close 1
  776.             If Exist("SYS:") : Dir$="SYS:" : End If 
  777.             Wait 40
  778.             Request On 
  779.             End 
  780.          End If 
  781.       End If 
  782.       '
  783.       If X>383 and Y>52 Then SELECT[384]
  784.       Repeat : Until Mouse Key=0 : Wait 10
  785.    Loop 
  786.    Pop Proc
  787.    '
  788.    PROMENU_A:
  789.    Ink 3
  790.    N$=Str$(SCW)-" " : N=Len(N$) : N1$=String$("0",4-N) : NA$=N1$+N$
  791.    N$=Str$(SCH)-" " : N=Len(N$) : N1$=String$("0",4-N) : NB$=N1$+N$
  792.    Screen(0) : N=Screen Colour : Screen 1 : N$=Str$(N)-" " : N=Len(N$) : N1$=String$("0",4-N) : NC$=N1$+N$
  793.    Ink 2 : Text 83,118,NA$ : Text 212,118,NB$ : Text 340,118,NC$
  794.    If SCM<5 Then N=1 : N1=0 Else N=0 : N1=1
  795.    G[0,96,126,107,N] : G[128,96,254,107,N1]
  796.    If SCL=Laced Then G[256,96,382,107,1] Else G[256,96,382,107,0]
  797.    Return 
  798.    '
  799.    PROMENU_B:
  800.    G[N-10,110,N+43-I,121,1] : N$=""
  801.    Repeat 
  802.       Clear Key : N2=0 : While N2=0 : N2=Asc(Inkey$) : Wend 
  803.       Ink 0 : Bar N,111 To N+40,120 : Ink 1
  804.       If N2>47 and N2<58 Then N$=N$+Chr$(N2)
  805.       If N2=8 and Len(N$)>0 Then N$=Left$(N$,Len(N$)-1)
  806.       Text N,118,N$
  807.    Until N2=13 or Len(N$)>3
  808.    N3=Val(N$)
  809.    If I<3 Then Add N3,-(N3 mod 8)
  810.    If I=3
  811.       If N3<2 : N3=2 : End If 
  812.       If N3>2 and N3<5 : N3=4 : End If 
  813.       If N3>4 and N3<9 : N3=8 : End If 
  814.       If N3>8 and N3<17 : N3=16 : End If 
  815.       If N3>16 and N3<33 : N3=32 : End If 
  816.       If N3>32 and N3<65 : N3=64 : End If 
  817.       If N3>64 : N3=4096 : End If 
  818.    End If 
  819.    N$=Str$(N3)-" "
  820.    If N3=0 : N3=N1
  821.       N$=Str$(N3)-" "
  822.    End If 
  823.    N2=Len(N$)
  824.    N$=String$("0",4-N2)+N$
  825.    Ink 2 : Text N,118,N$
  826.    N1=N3
  827.    G[N-10,110,N+43-1,121,0]
  828.    Return 
  829.    '
  830.    Data 0,52,382,63,145,60,"Disk Operations"
  831.    Data 0,66,92,77,15,74,"Load PIC"
  832.    Data 94,66,166,77,98,74,"Save IFF"
  833.    Data 168,66,186,77,173,74,Str$(COMPRESS)-" "
  834.    Data 188,66,280,77,202,74,"Save ABK"
  835.    Data 282,66,382,77,310,74,"Delete"
  836.    '
  837.    Data 0,82,382,93,155,90,"Screen Format"
  838.    Data 0,96,126,107,35,104,"Lowres"
  839.    Data 128,96,254,107,178,104,"Hires"
  840.    Data 256,96,382,107,282,104,"Interlaced"
  841.    '
  842.    Data 0,110,70,121,18,118,"Width"
  843.    Data 73,110,126,121,83,118,""
  844.    Data 128,110,199,121,140,118,"Height"
  845.    Data 202,110,254,121,212,118,""
  846.    Data 256,110,327,121,263,118,"Colours"
  847.    Data 330,110,382,121,340,118,""
  848.    '
  849.    Data 0,126,126,137,12,134,"Flip Screen X"
  850.    Data 128,126,254,137,140,134,"Flip Screen Y"
  851.    Data 256,126,382,137,268,134,"Flip Screen Z"
  852.    Data 0,152,126,163,52,160,"Use"
  853.    Data 128,152,254,163,174,160,"About"
  854.    Data 256,152,382,163,263,160,"Exit AIFFpaint"
  855. End Proc
  856. Procedure FONTMENU
  857.    Ink 0 : Bar 0,52 To 640,164
  858.    G[385,52,400,150,0] : G[402,52,639,150,0] : G[385,152,639,163,0]
  859.    Gosub FONTMENU_A
  860.    For I=0 To 2 : G[I*128+1,52,I*128+126,63,0] : G[I*128+1,65,I*128+126,76,0] : Next 
  861.    G[1,78,382,89,0]
  862.    Ink 2 : For I=0 To 6 : Read X,Y,N$ : Text X,Y,N$ : Next 
  863.    Screen Display 1,128,64,,166 : Screen Display 2,128,50,,
  864.    SFONT2=SFONT
  865.    On Error Proc FEHLER
  866.    Do 
  867.       While Mouse Key=0 : Multi Wait : Wend 
  868.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : A=0
  869.       If X>385 and X<640 and Y>51 and Y<148
  870.          If X>386 and X<397 and Point(X,Y)=0
  871.             Y=Y-54 : Ink 0 : Bar 387,54 To 396,149 : Ink 2
  872.             If Y>Y#
  873.                Y#=Y#+Y2# : A=1 : Inc FONT
  874.             End If 
  875.             If Y<Y# and A=0
  876.                Y#=Y#-Y2# : Dec FONT
  877.             End If 
  878.             Bar 387,54+Y# To 396,Min(148,52+Y#+Y2#)
  879.             FONT2=FONT*12 : Ink 0 : Bar 407,54 To 638,149 : Ink 2
  880.             If FONT2>FONTANZ-12 : FONT2=FONTANZ-12 : End If 
  881.             For I=0 To 11 : Text 409,60+I*8,LFONT$(I+FONT2) : Next I
  882.          End If 
  883.       End If 
  884.       If X>406 and X<638 and Y>54 and Y<147
  885.          Add Y,-54 : Y=Y/8*8/8 : DFONT$=LFONT$(Y+FONT2) : SFONT=Y+FONT2+1
  886.          Ink 1,2 : Text 409,60+Y*8,DFONT$ : Ink 2,0 : Text 394,160,DFONT$ : Wait 20 : Text 409,60+Y*8,DFONT$
  887.       End If 
  888.       If X>0 and X<383 and Y>51 and Y<64
  889.          X=X/128*128/128
  890.          G[X*128+1,52,X*128+126,63,1]
  891.          If X=0
  892.             Get Fonts : FONTANZ=0
  893.             Repeat 
  894.                Inc FONTANZ : N$=Left$(Font$(FONTANZ),33)
  895.                N1$=Right$(N$,3)-" " : N$=Left$(N$,25) : N2$=N$+Space$(3-Len(N1$))+N1$
  896.                LFONT$(FONTANZ-1)=N2$
  897.             Until N$=""
  898.             Dec FONTANZ : Gosub FONTMENU_A
  899.          End If 
  900.          If X=1
  901.             Screen 0 : Get Block 1,0,0,Screen Width,Screen Height : Cls 0 : Set Font SFONT : Set Text F4
  902.             N=SCW/2-Text Length("A") : Ink INDEX1,0 : Text N,SCH/2-8,"A" : Screen To Front 0
  903.             Repeat 
  904.                N$="" : Clear Key 
  905.                While N$="" : N$=Inkey$ : Wend 
  906.                Cls 0 : Text N,SCH/2-8,N$
  907.             Until Asc(N$)=13
  908.             Screen To Back 0 : Put Block 1,0,0 : Screen 1
  909.          End If 
  910.          If X=2
  911.             Screen 0 : Set Font SFONT : Set Text F4 : Screen 1
  912.             Screen Display 1,128,SCD,,51 : Screen Display 2,128,SCD-14,, : Screen 1 : Pop Proc
  913.          End If 
  914.          G[X*128+1,52,X*128+126,63,0]
  915.       End If 
  916.       If X<382 and Y>64 and Y<77
  917.          X=X/128
  918.       If X=0 : If F1 : F1=0 : I=0 Else F1=1 : I=1 : End If : End If 
  919.       If X=1 : If F2 : F2=0 : I=0 Else F2=2 : I=1 : End If : End If 
  920.       If X=2 : If F3 : F3=0 : I=0 Else F3=4 : I=1 : End If : End If 
  921.          F4=F1+F2+F3 : Screen 0 : Set Text F4 : Screen 1 : G[X*128+1,65,X*128+126,76,I]
  922.       End If 
  923.       If X>6 and X<383 and Y>77 and Y<90
  924.          G[1,78,382,89,1] : Screen 0 : Wait 20 : If SFONT2<>SFONT : SFONT=SFONT2 : Set Font SFONT : End If 
  925.          Screen Display 1,128,SCD,,51 : Screen Display 2,128,SCD-14,, : Screen 1 : Pop Proc
  926.       End If 
  927.       While Mouse Key<>0 : Wend 
  928.    Loop 
  929.    '
  930. FONTMENU_A:
  931.    Ink 2 : For I=0 To 11 : Text 409,60+I*8,LFONT$(I) : Next I
  932.    Y#=96/Max(1,(FONTANZ/12.0)) : Y2#=Y#
  933.    Ink 0 : Bar 387,54 To 396,148 : Ink 2 : Bar 387,54 To 396,52+Y2# : Y#=Y#-Y2#
  934.    Text 394,160,DFONT$
  935. Return 
  936. '
  937. Data 26,60,"Read Fonts",157,60,"Show Font",284,60,"Use Font",30,73,"Underline",175,73,"Bold",296,73,"Italic",179,86,"Use"
  938. End Proc
  939. Procedure AMOSBOBMENU
  940.    Ink 0 : Bar 0,52 To 640,164
  941.    For I=1 To 30
  942.       Read X,Y,X2,Y2,N1,N2,N$
  943.       G[X,Y,X2,Y2,0]
  944.       Ink 2 : Text N1,N2,N$
  945.    Next 
  946.    For I=0 To 2
  947.       For I2=0 To 2
  948.          G[347+I2*12,120+I*4,358+I2*12,123+I*4,0]
  949.       Next I2
  950.    Next I
  951.    '
  952.    LD_SV[384]
  953.    Gosub ABM_MASK
  954.    On Error Proc FEHLER
  955.    '
  956.    Do 
  957.       While Mouse Key=0 : Multi Wait : Wend 
  958.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : E=0
  959.       '
  960.       If X>384 and Y>52 : SELECT[384] : End If 
  961.       '
  962.       If X>0 and X<383 and Y>51 and Y<64
  963.          X=X/128 : G[X*128+1,52,X*128+126,63,1]
  964.          If FILE$<>""
  965.             '* Bob-Bank einladen 
  966.             '* ----------------- 
  967.             If X=0
  968.                Erase 1
  969.                Load FILE$
  970.                Wait Vbl 
  971.                NBOB=Length(1)
  972.                GBOB=NBOB+1
  973.                PBOB=1
  974.                ABOB=1
  975.                EBOB=NBOB
  976.                BBOB=1
  977.                Gosub ABM_MASK
  978.             End If 
  979.             '* Bob-Bank speichern
  980.             '* ------------------
  981.             If X=1 and NBOB
  982.                Save FILE$,1
  983.                If E=0
  984.                   SETCOMMENT["AMOS-Bobs"]
  985.                End If 
  986.             End If 
  987.             '* Bob-Bank von Device löschen 
  988.             '* --------------------------- 
  989.             If X=2
  990.                Kill FILE$
  991.             End If 
  992.          End If 
  993.          Screen 1 : Wait 20 : G[X*128+1,52,X*128+126,63,0]
  994.       End If 
  995.       '
  996.       If X>1 and X<382 and Y>65 and Y<78
  997.          X=X/128 : G[X*128+91,66,X*128+126,77,1]
  998.          If X=0
  999.             X2=97 : Y=74 : GBOB2=GBOB : ABOB=1 : BBOB=1 : Gosub ABM
  1000.             If N=0 : N=GBOB2 : End If 
  1001.             If N>NBOB+1 : N=NBOB+1 : End If 
  1002.             If N<=NBOB : Dec NBOB : Dec PBOB : Dec EBOB : End If 
  1003.             GBOB=N : Gosub ABM_MASK : G[91,66,126,77,0] : Wait 20
  1004.             Screen 0 : Screen To Front 0
  1005.             Get Block 1,0,0,Screen Width,Screen Height : Ink 1,0
  1006.             Repeat : Until Mouse Key=0
  1007.             Repeat 
  1008.                Put Block 1,0,0 : X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1009.                X=Max(0,X) : X=Min(X,SCW-WBOB)
  1010.                Y=Max(0,Y) : Y=Min(Y,SCH-HBOB)
  1011.                Box X,Y To X+WBOB,Y+HBOB
  1012.                While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) and Mouse Key=0 : Wend 
  1013.             Until Mouse Key
  1014.             Repeat : Until Mouse Key=0
  1015.             Put Block 1,0,0 : Get Bob GBOB,X,Y To X+WBOB,Y+HBOB : Screen To Back 0 : Screen 1
  1016.             X=0 : Y=0 : Inc GBOB : Inc NBOB : PBOB=NBOB : EBOB=NBOB : Gosub ABM_MASK
  1017.          End If 
  1018.          If X=1
  1019.             X2=226 : Y=74 : Gosub ABM
  1020.             N=Max(1,N) : If N>SCW : N=SCW : End If 
  1021.             WBOB=N : Gosub ABM_MASK
  1022.          End If 
  1023.          If X=2
  1024.             X2=353 : Y=74 : Gosub ABM
  1025.             N=Max(1,N) : If N>SCH : N=SCH : End If 
  1026.             HBOB=N : Gosub ABM_MASK
  1027.          End If 
  1028.          G[X*128+91,66,X*128+126,77,0]
  1029.       End If 
  1030.       '
  1031.       If X<383 and Y>79 and Y<92
  1032.          X=X/128 : G[X*128+91,80,X*128+126,91,1]
  1033.          If X=0
  1034.             X2=97 : Y=88 : Gosub ABM
  1035.             If N=0 : N=PBOB : End If 
  1036.             If N>NBOB : N=NBOB : End If 
  1037.             PBOB=N : Gosub ABM_MASK : Screen 0 : Cls 0 : Paste Bob XBB,YBB,PBOB
  1038.             Screen To Front 0
  1039.             While Mouse Key<>0 : Wend : While Mouse Key=0 : Wend 
  1040.             Cls 0 : Screen To Back 0 : Put Block 1,0,0 : Screen 1
  1041.             Wait 50 : While Mouse Key<>0 : Wend 
  1042.          End If 
  1043.          If X=1
  1044.             X2=225 : Y=88 : Gosub ABM
  1045.             If N>NBOB : N=NBOB : End If 
  1046.             If N=0 : N=BBOB : End If 
  1047.             BBOB=N : Gosub ABM_MASK : G[219,80,254,91,0] : Wait 10
  1048.             Screen To Front 0 : Screen 0 : Get Palette 2 : Clear Key 
  1049.             While Inkey$<>" "
  1050.                While Mouse Key<>0
  1051.                   X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1052.                   Paste Bob X,Y,BBOB
  1053.                Wend 
  1054.             Wend 
  1055.             Get Block 1,0,0,Screen Width,Screen Height : Screen To Back 0 : Screen 1
  1056.          End If 
  1057.          G[X*128+91,80,X*128+126,91,0]
  1058.       End If 
  1059.       '
  1060.       If X<382 and Y>106 and Y<119
  1061.          X=X/128 : G[X*128+91,107,X*128+126,118,1]
  1062.          If X=0 and NBOB
  1063.             X2=97 : Y=115 : Gosub ABM : ABOB=N
  1064.             If ABOB=0 : ABOB=1 : Gosub ABM_MASK : End If 
  1065.             If ABOB>NBOB or ABOB>EBOB : ABOB=EBOB-1 : Gosub ABM_MASK : End If 
  1066.          End If 
  1067.          If X=1 and NBOB
  1068.             X2=225 : Y=115 : Gosub ABM : EBOB=N
  1069.             If EBOB=<ABOB : EBOB=ABOB+1 : Gosub ABM_MASK : End If 
  1070.             If EBOB>NBOB : EBOB=NBOB : Gosub ABM_MASK : End If 
  1071.          End If 
  1072.          If X=2 and NBOB : X2=353 : Y=115 : Gosub ABM : SBOB=Max(1,N) : Gosub ABM_MASK : End If 
  1073.          Wait 10 : G[X*128+91,107,X*128+126,118,0]
  1074.       End If 
  1075.       If X<256 and Y>119 and Y<132
  1076.          X=X/128 : G[X*128+91,120,X*128+126,131,1]
  1077.          If X=0
  1078.             X2=97 : Y=128 : Gosub ABM : XBB=Min(SCW,N) : Gosub ABM_MASK
  1079.          End If 
  1080.          If X=1
  1081.             X2=225 : Y=128 : Gosub ABM : YBB=Min(SCH,N) : Gosub ABM_MASK
  1082.          End If 
  1083.          G[X*128+91,120,X*128+126,131,0]
  1084.       End If 
  1085.       If X>349 and X<382 and Y>119 and Y<132 and NBOB
  1086.          Add X,-350 : Add Y,-120 : X=X/12 : Y=Y/4 : N$=Str$(X)+Str$(Y) : N$=N$-" " : N=Val("$"+N$) : Hot Spot PBOB,N
  1087.          For I=1 To 0 Step -1 : G[347+X*12,120+Y*4,358+X*12,123+Y*4,I] : Wait 20 : Next I
  1088.       End If 
  1089.       '
  1090.       If X<383 and Y>132 and Y<145 and NBOB
  1091.          G[1,133,382,144,1] : N$=""
  1092.          For I=ABOB To EBOB
  1093.             N$=N$+"("+Str$(I)+","+Str$(SBOB)+")"
  1094.          Next I
  1095.          N$=N$-" "+"L"
  1096.          Screen To Front 0 : Screen 0
  1097.          Bob ABOB,XBB,YBB,ABOB : Channel 1 To Bob ABOB : Anim 1,N$ : Anim On 
  1098.          Wait 50 : While Mouse Key<>0 : Wend : While Mouse Key=0 : Wend 
  1099.          Anim Off : Bob Off : Screen To Back 0 : Screen 1
  1100.          Wait 20 : G[1,133,382,144,0] : While Mouse Key<>0 : Wend 
  1101.       End If 
  1102.       '
  1103.       If Y>151 and Y<164
  1104.          If X<126
  1105.             G[1,152,126,163,1] : Erase 1
  1106.             GBOB=1 : PBOB=0 : ABOB=0 : EBOB=0 : NBOB=0 : BBOB=0
  1107.             Gosub ABM_MASK : Wait 20 : G[1,152,126,163,0]
  1108.          End If 
  1109.          If X>256 and X<382
  1110.             G[257,152,382,163,1]
  1111.             Wait 20 : Screen 1 : Screen Display 1,128,SCD,,51 : Screen Display 2,128,SCD-14,, : Pop Proc
  1112.          End If 
  1113.       End If 
  1114.    Loop 
  1115.    ABM:
  1116.    N$="" : Clear Key 
  1117.    Repeat 
  1118.       N1=0
  1119.       While N1=0 : N1=Asc(Inkey$) : Wend 
  1120.       If N1>47 and N1<58 : N$=N$+Chr$(N1) : End If 
  1121.       If N1=8 and Len(N$)>0 Then N$=Left$(N$,Len(N$)-1)
  1122.       Ink 0 : Bar X2,Y-7 To X2+23,Y : Ink 1 : Text X2,Y,N$ : Clear Key 
  1123.    Until N1=13 or Len(N$)=3
  1124.    Ink 2 : N$=String$("0",3-Len(N$))+N$ : Text X2,Y,N$ : N=Val(N$)
  1125.    Return 
  1126.    ABM_MASK:
  1127.    Screen 1
  1128.    Ink 2
  1129.    N$=Str$(GBOB)-" " : Text 97,74,String$("0",3-Len(N$))+N$
  1130.    N$=Str$(WBOB)-" " : Text 225,74,String$("0",3-Len(N$))+N$
  1131.    N$=Str$(HBOB)-" " : Text 353,74,String$("0",3-Len(N$))+N$
  1132.    N$=Str$(PBOB)-" " : Text 97,88,String$("0",3-Len(N$))+N$
  1133.    N$=Str$(BBOB)-" " : Text 225,88,String$("0",3-Len(N$))+N$
  1134.    N$=Str$(NBOB)-" " : Text 353,88,String$("0",3-Len(N$))+N$
  1135.    N$=Str$(ABOB)-" " : Text 97,115,String$("0",3-Len(N$))+N$
  1136.    N$=Str$(EBOB)-" " : Text 225,115,String$("0",3-Len(N$))+N$
  1137.    N$=Str$(SBOB)-" " : Text 353,115,String$("0",3-Len(N$))+N$
  1138.    N$=Str$(XBB)-" " : Text 97,128,String$("0",3-Len(N$))+N$
  1139.    N$=Str$(YBB)-" " : Text 225,128,String$("0",3-Len(N$))+N$
  1140.    Return 
  1141.    Data 1,52,126,63,35,60,"Load Bob"
  1142.    Data 129,52,254,63,162,60,"Save Bob"
  1143.    Data 257,52,382,63,280,60,"Delete Bob"
  1144.    '
  1145.    Data 1,66,88,77,9,74,"Get Bob #",91,66,126,77,0,0,""
  1146.    Data 129,66,216,77,151,74,"Width",219,66,254,77,0,0,""
  1147.    Data 257,66,344,77,276,74,"Height",347,66,382,77,0,0,""
  1148.    '
  1149.    Data 1,80,88,91,5,88,"Show Bob #",91,80,126,91,0,0,""
  1150.    Data 129,80,216,91,135,88,"Bob brush",219,80,254,91,225,88,""
  1151.    Data 257,80,344,91,264,88,"# of Bobs",347,80,382,91,0,0,""
  1152.    '
  1153.    Data 1,94,382,105,102,102,"Bob Animation Generator"
  1154.    Data 1,107,88,118,24,115,"Start",91,107,126,118,97,101,""
  1155.    Data 129,107,216,118,160,115,"End",219,107,254,118,225,101,""
  1156.    Data 257,107,344,118,280,115,"Speed",347,107,382,118,353,101,""
  1157.    Data 1,120,88,131,9,128,"Bob Pos X",91,120,126,131,97,114,""
  1158.    Data 129,120,216,131,137,128,"Bob Pos Y",219,120,254,131,225,114,""
  1159.    Data 257,120,344,131,268,128,"Hot Spot"
  1160.    Data 1,133,382,144,132,141,"Start Animation"
  1161.    '
  1162.    Data 1,152,126,163,7,160,"Erase all Bobs"
  1163.    Data 257,152,382,163,298,160,"Abort"
  1164. End Proc
  1165. Procedure AMOSICONMENU
  1166.    Ink 0 : Bar 0,52 To 640,164
  1167.    For I=1 To 18
  1168.       Read X,Y,X2,Y2,N1,N2,N$
  1169.       G[X,Y,X2,Y2,0]
  1170.       Ink 2 : Text N1,N2,N$
  1171.    Next 
  1172.    '
  1173.    LD_SV[384]
  1174.    Gosub AIM_MASK
  1175.    On Error Proc FEHLER
  1176.    '
  1177.    Do 
  1178.       While Mouse Key=0 : Multi Wait : Wend 
  1179.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : E=0
  1180.       If X>384 and Y>52 : SELECT[384] : End If 
  1181.       If X>0 and X<383 and Y>51 and Y<64
  1182.          X=X/128 : G[X*128+1,52,X*128+126,63,1]
  1183.          If FILE$<>""
  1184.             If X=0 : Erase 2 : Load FILE$ : Wait Vbl : NICO=Length(2) : GICO=NICO+1 : PICO=1 : BICO=1 : Gosub AIM_MASK : End If 
  1185.             If X=1
  1186.                Save FILE$,2
  1187.                If E=0
  1188.                   SETCOMMENT["AMOS-Icons"]
  1189.                End If 
  1190.             End If 
  1191.             If X=2 : Kill FILE$ : End If 
  1192.          End If 
  1193.          Screen 1 : Wait 20 : G[X*128+1,52,X*128+126,63,0]
  1194.       End If 
  1195.       '
  1196.       If X>1 and X<258 and Y>65 and Y<78
  1197.          X=X/128 : G[X*128+91,66,X*128+126,77,1]
  1198.          If X=0
  1199.             X2=97 : Y=74 : GICO2=GICO : BICO=1 : Gosub AIM
  1200.             If N=0 : N=GICO2 : End If 
  1201.             If N>NICO+1 : N=NICO+1 : End If 
  1202.             If N<=NICO : Dec NICO : Dec PICO : End If 
  1203.             GICO=N : Gosub AIM_MASK : G[91,66,126,77,0] : Wait 20
  1204.             Screen 0 : Screen To Front 0
  1205.             Get Block 1,0,0,Screen Width,Screen Height : Ink 1,0
  1206.             Repeat 
  1207.                Put Block 1,0,0 : X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1208.                Draw 0,Y To SCW,Y : Draw X,0 To X,SCH
  1209.                While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) and Mouse Key=0 : Wend 
  1210.             Until Mouse Key
  1211.             Put Block 1,0,0
  1212.             While Mouse Key
  1213.                X2=X Screen(X Mouse) : Y2=Y Screen(Y Mouse)
  1214.                X2=Min(SCW,X2) : Y2=Min(SCH,Y2)
  1215.                Put Block 1,0,0 : Box X,Y To X2,Y2
  1216.                While X2=X Screen(X Mouse) and Y2=Y Screen(Y Mouse) : Wend 
  1217.             Wend 
  1218.             If X2<X : Swap X2,X : End If 
  1219.             If Y2<Y : Swap Y2,Y : End If 
  1220.             Put Block 1,0,0 : Get Icon GICO,Max(0,X),Max(0,Y) To X2,Y2 : Screen To Back 0 : Screen 1
  1221.             X=0 : Y=0 : Inc GICO : Inc NICO : PICO=NICO : Gosub AIM_MASK
  1222.          End If 
  1223.          '
  1224.          If X=1 and NICO
  1225.             X2=226 : Y=74 : Gosub AIM
  1226.             If N=0 : N=PICO : End If 
  1227.             If N>NICO : N=NICO : End If 
  1228.             PICO=N : Gosub AIM_MASK : Screen 0 : Cls 0 : Paste Icon XIC,YIC,PICO
  1229.             Screen To Front 0
  1230.             While Mouse Key<>0 : Wend : While Mouse Key=0 : Wend 
  1231.             Cls 0 : Screen To Back 0 : Put Block 1,0,0 : Screen 1
  1232.             Wait 50 : While Mouse Key<>0 : Wend 
  1233.          End If 
  1234.          G[X*128+91,66,X*128+126,77,0]
  1235.       End If 
  1236.       If X>298 and X<350 and Y>68 and Y<75
  1237.          G[257,66,382,77,1] : Erase 2
  1238.          GICO=1 : PICO=0 : NICO=0 : BICO=0
  1239.          Gosub AIM_MASK : Wait 20 : G[257,66,382,77,0]
  1240.       End If 
  1241.       '
  1242.       If X<256 and Y>79 and Y<92
  1243.          X=X/128 : G[X*128+91,80,X*128+126,91,1]
  1244.          If X=0
  1245.             X2=97 : Y=88 : Gosub AIM : XIC=Min(SCW,N) : Gosub AIM_MASK
  1246.          End If 
  1247.          If X=1
  1248.             X2=225 : Y=88 : Gosub AIM : YIC=Min(SCH,N) : Gosub AIM_MASK
  1249.          End If 
  1250.          G[X*128+91,80,X*128+126,91,0]
  1251.       End If 
  1252.       If X>257 and X<382 and Y>79 and Y<92 and NICO : G[257,80,382,91,1] : Make Icon Mask : Wait 20 : G[257,80,382,91,0] : End If 
  1253.       '
  1254.       If Y>93 and Y<106
  1255.          If X>127 and X<254 and NICO
  1256.             G[219,94,254,105,1]
  1257.             X2=225 : Y=102 : Gosub AIM
  1258.             If N>NICO : N=NICO : End If 
  1259.             If N=0 : N=BICO : End If 
  1260.             BICO=N : Gosub AIM_MASK : G[219,94,254,105,0] : Wait 10
  1261.             Screen To Front 0 : Screen 0 : Get Palette 2 : Clear Key 
  1262.             While Inkey$<>" "
  1263.                While Mouse Key<>0
  1264.                   X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1265.                   Paste Icon X,Y,BICO
  1266.                Wend 
  1267.             Wend 
  1268.             Get Block 1,0,0,Screen Width,Screen Height : Screen To Back 0 : Screen 1
  1269.          End If 
  1270.          If X>256 and X<382
  1271.             G[257,94,382,105,1]
  1272.             Wait 20 : Screen 1 : Screen Display 1,128,SCD,,51 : Screen Display 2,128,SCD-14,, : Pop Proc
  1273.          End If 
  1274.       End If 
  1275.    Loop 
  1276.    AIM:
  1277.    N$="" : Clear Key 
  1278.    Repeat 
  1279.       N1=0
  1280.       While N1=0 : N1=Asc(Inkey$) : Wend 
  1281.       If N1>47 and N1<58 : N$=N$+Chr$(N1) : End If 
  1282.       If N1=8 and Len(N$)>0 Then N$=Left$(N$,Len(N$)-1)
  1283.       Ink 0 : Bar X2,Y-7 To X2+23,Y : Ink 1 : Text X2,Y,N$ : Clear Key 
  1284.    Until N1=13 or Len(N$)=3
  1285.    Ink 2 : N$=String$("0",3-Len(N$))+N$ : Text X2,Y,N$ : N=Val(N$)
  1286.    Return 
  1287.    AIM_MASK:
  1288.    Screen 1
  1289.    Ink 2
  1290.    N$=Str$(GICO)-" " : Text 97,74,String$("0",3-Len(N$))+N$
  1291.    N$=Str$(PICO)-" " : Text 225,74,String$("0",3-Len(N$))+N$
  1292.    N$=Str$(XIC)-" " : Text 97,88,String$("0",3-Len(N$))+N$
  1293.    N$=Str$(YIC)-" " : Text 225,88,String$("0",3-Len(N$))+N$
  1294.    N$=Str$(NICO)-" " : Text 97,102,String$("0",3-Len(N$))+N$
  1295.    N$=Str$(BICO)-" " : Text 225,102,String$("0",3-Len(N$))+N$
  1296.    Return 
  1297.    Data 1,52,126,63,31,60,"Load Icon"
  1298.    Data 129,52,254,63,158,60,"Save Icon"
  1299.    Data 257,52,382,63,276,60,"Delete Icon"
  1300.    '
  1301.    Data 1,66,88,77,13,74,"Get Icon",91,66,126,77,0,0,""
  1302.    Data 129,66,216,77,137,74,"Show Icon",219,66,254,77,0,0,""
  1303.    Data 257,66,382,77,260,74,"Erase all Icons"
  1304.    '
  1305.    Data 1,80,88,91,5,88,"Icon Pos X",91,80,126,91,0,0,""
  1306.    Data 129,80,216,91,133,88,"Icon Pos Y",219,80,254,91,0,0,""
  1307.    Data 257,80,382,91,277,88,"Transparent"
  1308.    Data 1,94,88,105,4,102,"# of Icons",91,94,126,105,97,160,""
  1309.    Data 129,94,216,105,131,102,"Icon brush",219,94,254,105,225,160,""
  1310.    Data 257,94,382,105,298,102,"Abort"
  1311. End Proc
  1312. Procedure OPTIONEN
  1313.    Ink 0 : Bar 0,52 To 640,164
  1314.    Ink 2 : Text 158,60,"Line Mask"
  1315.    Text 158,87,"Draw Mask"
  1316.    Text 166,115,"Pattern"
  1317.    Text 157,127,"+"
  1318.    Text 222,127,"-"
  1319.    Text 506,160,"Use"
  1320.    Text 32,100,"JAM1"
  1321.    Text 128,100,"JAM2"
  1322.    Text 229,100,"XOR"
  1323.    Text 303,100,"INVERSID"
  1324.    Text 426,60,"Border"
  1325.    Text 558,60,"Sieve"
  1326.    G[1,52,382,63,0]
  1327.    G[1,79,382,90,0]
  1328.    G[1,107,382,118,0]
  1329.    G[148,120,172,128,0]
  1330.    G[214,120,238,128,0]
  1331.    G[1,130,382,163,0]
  1332.    G[385,152,639,163,0]
  1333.    G[385,52,511,63,0]
  1334.    G[513,52,639,63,0]
  1335.    Gosub LMASK
  1336.    Gosub DMASK
  1337.    Gosub PMASK
  1338.    Screen Display 1,128,64,,166
  1339.    Screen Display 2,128,50,,
  1340.    '
  1341.    Do 
  1342.       Wait 20
  1343.       While Mouse Key=0 : Multi Wait : Wend 
  1344.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1345.       If X>7 and X<375 and Y>64 and Y<76
  1346.          Add X,-7 : X=X/23 : Inc X
  1347.          If Mid$(LINE$,X,1)="1"
  1348.             Mid$(LINE$,X,1)="0"
  1349.          Else 
  1350.             Mid$(LINE$,X,1)="1"
  1351.          End If 
  1352.          Gosub LMASK
  1353.       End If 
  1354.       If X>0 and X<383 and Y>91 and Y<104
  1355.          X=X/96
  1356.          If X<2
  1357.          If DMASK(0) : DMASK(1)=1 : DMASK(0)=0 Else DMASK(1)=0 : DMASK(0)=1 : End If 
  1358.          End If 
  1359.          If X=2
  1360.          If DMASK(2) : DMASK(2)=0 Else DMASK(2)=2 : End If 
  1361.          End If 
  1362.          If X=3
  1363.          If DMASK(3) : DMASK(3)=0 Else DMASK(3)=4 : End If 
  1364.          End If 
  1365.          Gosub DMASK
  1366.       End If 
  1367.       If(X>147 and X<172) or(X>213 and X<239) and Y>119 and Y<129
  1368.          If X>147 and X<172 : X=148 : Add PATTERN,1,0 To 35 : End If 
  1369.          If X>213 and X<239 : X=214 : Add PATTERN,-1,0 To 35 : End If 
  1370.          G[X,120,X+24,128,1] : Gosub PMASK : Wait 10 : G[X,120,X+24,128,0]
  1371.       End If 
  1372.       If X>384 and X<640 and Y>151 and Y<164
  1373.          G[385,152,639,163,1] : Wait 20 : N=0
  1374.          For I=1 To 3 : Add N,DMASK(I) : Next 
  1375.          N1=Val("%"+LINE$)
  1376.          Screen 0 : Set Pattern PATTERN : Gr Writing N : Set Line N1 : Screen 1
  1377.          Screen Display 1,128,SCD,,51 : Screen Display 2,128,SCD-14,, : Pop Proc
  1378.       End If 
  1379.       If X>384 and X<640 and Y>51 and Y<61
  1380.          Add X,-385 : X=X/128 : G[X*128+385,52,X*128+510,63,1] : Wait 20
  1381.          If X=0
  1382.             Gosub KREUZ
  1383.             Ink INDEX1
  1384.             For I=X To X2
  1385.                For I2=Y To Y2
  1386.                   N=Point(I,I2)
  1387.                   If N<>0 and N<>INDEX1
  1388.                      If Point(I,I2-1)=0 : Plot I,I2-1 : End If 
  1389.                      If Point(I,I2+1)=0 : Plot I,I2+1 : End If 
  1390.                      If Point(I-1,I2)=0 : Plot I-1,I2 : End If 
  1391.                      If Point(I+1,I2)=0 : Plot I+1,I2 : End If 
  1392.                   End If 
  1393.                Next I2
  1394.             Next I
  1395.             Ink INDEX1 : Screen To Back 0 : Screen 1 : X=0 : Y=0
  1396.          End If 
  1397.          If X=1
  1398.             Gosub KREUZ : Ink INDEX2
  1399.             For I=X To X2
  1400.                For I2=Y To Y2
  1401.                   If Point(I,I2)=INDEX1 : Plot I,I2 : End If 
  1402.                Next I2
  1403.             Next I
  1404.             Ink INDEX1 : Screen To Back 0 : Screen 1 : X=1 : Y=0
  1405.          End If 
  1406.          G[X*128+385,52,X*128+510,63,0] : Change Mouse 2
  1407.       End If 
  1408.    Loop 
  1409.    Pop Proc
  1410.    LMASK:
  1411.    For I=1 To 16
  1412.       N$=Mid$(LINE$,I,1)
  1413.    If N$="1" : N=0 Else N=1 : End If 
  1414.       Ink 2,0 : Text(I-1)*23+15,73,N$ : G[(I-1)*23+9,65,(I-1)*23+29,75,N]
  1415.    Next I
  1416.    Return 
  1417.    DMASK:
  1418.    Locate ,0
  1419.    For I=0 To 3
  1420.       If DMASK(I) Then N=1 Else N=0
  1421.       G[I*96+1,92,I*96+94,103,N]
  1422.    Next I
  1423.    Return 
  1424.    PMASK:
  1425.    Set Pattern PATTERN : Ink 3,4 : Bar 10,134 To 372,159 : Set Pattern 0
  1426.    N$=Str$(PATTERN)-" " : N$=String$("0",2-Len(N$))+N$ : Ink 2,0 : Text 185,127,N$
  1427.    Return 
  1428.    KREUZ:
  1429.    Screen To Front 0 : Screen 0 : Get Block 1,0,0,Screen Width,Screen Height
  1430.    While Mouse Key<>0 : Wend : MK=0 : Ink 1
  1431.    Repeat 
  1432.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1433.       Draw 0,Y To SCW,Y : Draw X,0 To X,SCH
  1434.       While X=X Screen(X Mouse) and Y=Y Screen(Y Mouse) and MK=0 : MK=Mouse Key : Wend 
  1435.       Put Block 1,0,0
  1436.       If MK
  1437.          Repeat 
  1438.             X2=X Screen(X Mouse) : Y2=Y Screen(Y Mouse)
  1439.             Box X,Y To X2,Y2
  1440.             While X2=X Screen(X Mouse) and Y2=Y Screen(Y Mouse) : Wend 
  1441.             Put Block 1,0,0
  1442.          Until Mouse Key=0
  1443.       End If 
  1444.    Until MK
  1445.    If X2<X Then Swap X2,X
  1446.    If Y2<Y Then Swap Y2,Y
  1447.    MK=0 : Change Mouse 3
  1448.    Return 
  1449. End Proc
  1450. Procedure LADEFARBEN
  1451.    Ink 0 : Bar 0,52 To 640,164
  1452.    LD_SV[65]
  1453.    For I=0 To 5
  1454.       Gosub LADEFARBEN_A
  1455.       Read X,N$
  1456.       Ink 2 : Text X,69+I*16,N$
  1457.    Next I
  1458.    '
  1459.    On Error Proc FEHLER
  1460.    '
  1461. LADEFARBEN:
  1462.    Do 
  1463.       Wait 50
  1464.       While Mouse Key=0 : Multi Wait : Wend 
  1465.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : E=0
  1466.       '
  1467.       If X>384 and X<577 and Y>60 and Y<153
  1468.          If FILE$<>""
  1469.             If Y>60 and Y<72 and Exist(FILE$)
  1470.                I=0 : I2=1 : E=0 : Gosub LADEFARBEN_A : Screen 2
  1471.                Open In 1,FILE$
  1472.                   For I=0 To 31
  1473.                      If E=0
  1474.                         Input #1,N
  1475.                         If E=0 : Colour I,N : End If 
  1476.                      End If 
  1477.                   Next 
  1478.                Close 1
  1479.                Screen 0 : Get Palette 2 : FARBE1=Colour(INDEX1)
  1480.                Screen 1 : Colour 3,FARBE1 : I=0 : I2=0 : Gosub LADEFARBEN_A
  1481.                If E : Y=141 : End If 
  1482.             End If 
  1483.             If Y>76 and Y<89
  1484.                I=1 : I2=1 : E=0 : Gosub LADEFARBEN_A : Screen 2
  1485.                Open Out 1,FILE$
  1486.                If E=0
  1487.                   For I=0 To 31 : N=Colour(I) : Print #1,Hex$(N) : Next 
  1488.                   Close 1
  1489.                   SETCOMMENT["Palette"]
  1490.                End If 
  1491.                Screen 1 : I=1 : I2=0 : Gosub LADEFARBEN_A
  1492.                If E : Y=141 : End If 
  1493.             End If 
  1494.             If Y>92 and Y<105 and Exist(FILE$)
  1495.                I=2 : I2=1 : Gosub LADEFARBEN_A
  1496.                Kill FILE$ : If E=0 : FILE$="" : End If 
  1497.                Screen 1 : I=2 : I2=0 : Gosub LADEFARBEN_A
  1498.                If E : Y=141 : End If 
  1499.             End If 
  1500.          End If 
  1501.          If Y>108 and Y<121 and NBOB
  1502.             I=3 : I2=1 : Gosub LADEFARBEN_A : Screen 2 : Get Sprite Palette 
  1503.             Screen 0 : Get Palette 2 : FARBE1=Colour(INDEX1) : FARBE2=Colour(INDEX2)
  1504.             Screen 1 : Colour 3,FARBE1 : Colour 4,FARBE2 : Wait 20 : I=3 : I2=0 : Gosub LADEFARBEN_A
  1505.          End If 
  1506.          If Y>124 and Y<137 and NICO
  1507.             I=4 : I2=1 : Gosub LADEFARBEN_A : Screen 2 : Get Icon Palette 
  1508.             Screen 0 : Get Palette 2 : FARBE1=Colour(INDEX1) : FARBE2=Colour(INDEX2)
  1509.             Screen 1 : Colour 3,FARBE1 : Colour 4,FARBE2 : Wait 20 : I=4 : I2=0 : Gosub LADEFARBEN_A
  1510.          End If 
  1511.          If Y>140 and Y<153
  1512.             I=5 : I2=1 : E=0 : Gosub LADEFARBEN_A : Wait 10
  1513.             Screen Display 1,128,SCD,,51 : Screen Display 2,128,SCD-14,, : E=0 : Pop Proc
  1514.          End If 
  1515.       End If 
  1516.       If X>63 and X<321 and Y>51 and Y<164 Then SELECT[65]
  1517.    Loop 
  1518.    '
  1519. LADEFARBEN_A:
  1520.    G[384,61+I*16,577,72+I*16,I2]
  1521. Return 
  1522. '
  1523. Data 435,"Load Palette",435,"Save Palette",428,"Delete Palette",423,"Get Bob Palette",419,"Get Icon Palette",440,"Use Palette"
  1524. End Proc
  1525. Procedure SELECT[N]
  1526.    X=X Screen(X Mouse)-N : Y=Y Screen(Y Mouse)
  1527.    If X>206 and X<255 and Y>51 and Y<64
  1528.       G[207+N,52,254+N,63,1]
  1529.       Ink 0 : Bar 23+N,66 To 252+N,148
  1530.       For I=0 To 150 : LSFILE$(I)=Chr$(255) : Next : I=0
  1531.       N$=Dev First$("")
  1532.       While N$<>""
  1533.          If N$<>""
  1534.             X=Instr(N$,":")
  1535.             LSFILE$(I)=Right$(Left$(N$,X),X-1)
  1536.             Inc I
  1537.          End If 
  1538.          N$=Dev Next$
  1539.       Wend 
  1540.       '
  1541.       FILEANZ#=I-1
  1542.       Ink 2
  1543.       For I=0 To Min(9,FILEANZ#)
  1544.          Text 23+N,I*8+74,LSFILE$(I)
  1545.       Next I
  1546.       '
  1547.       Y#=Max(1,FILEANZ#/10)
  1548.       FY#=81/Max(1,Y#)
  1549.       FYX#=FY#
  1550.       FX#=0
  1551.       FPOS=0
  1552.       '
  1553.       Ink 0 : Bar 2+N,67 To 11+N,148
  1554.       Ink 2 : Bar 2+N,67 To 11+N,Min(148,68+FY#)
  1555.       Wait 10
  1556.       G[207+N,52,254+N,63,0]
  1557.    End If 
  1558.    '  
  1559.    If X>17 and X<255 and Y>65 and Y<146
  1560.       Add Y,-66 : Y=Y/8*8/8
  1561.       Ink 1,2
  1562.       If LSFILE$(Y)<>Chr$(255)
  1563.          Text 23+N,Y*8+74,LSFILE$(FPOS+Y)+Space$(28-Len(LSFILE$(FPOS+Y)))
  1564.          Wait 10
  1565.       End If 
  1566.       '
  1567.       If Instr(LSFILE$(FPOS+Y),Chr$(255))=0
  1568.          If Instr(LSFILE$(FPOS+Y),":")=0 and Instr(LSFILE$(FPOS+Y),"*")=0
  1569.             Ink 2,0
  1570.             For I=0 To Min(9,FILEANZ#)
  1571.                Text 23+N,I*8+74,LSFILE$(FPOS+I)+Space$(28-Len(LSFILE$(FPOS+I)))
  1572.             Next 
  1573.             FILE$=LSFILE$(FPOS+Y)
  1574.          Else 
  1575.             Ink 0 : Bar 23+N,66 To 252+N,148
  1576.             Dir$=LSFILE$(FPOS+Y)-"*"
  1577.             DEV$=Dir$
  1578.             For I=0 To 150
  1579.                LSFILE$(I)=Chr$(255)
  1580.             Next 
  1581.             '
  1582.             I=0
  1583.             N$=Dir First$("")
  1584.             While N$<>""
  1585.                If N$<>""
  1586.                   N$=N$-Right$(N$,8) : N$=N$-" " : LSFILE$(I)=N$ : Inc I
  1587.                End If 
  1588.                N$=Dir Next$
  1589.             Wend 
  1590.             FILEANZ#=I-1
  1591.             Ink 2,0
  1592.             For I=0 To Min(9,FILEANZ#)
  1593.                Text 23+N,I*8+74,LSFILE$(I)-Chr$(255)
  1594.             Next 
  1595.             '
  1596.             Y#=Max(1,FILEANZ#/10)
  1597.             FY#=81/Max(1,Y#)
  1598.             FYX#=FY#
  1599.             FX#=0
  1600.             FPOS=0
  1601.             Ink 0 : Bar 2+N,67 To 11+N,148
  1602.             Ink 2 : Bar 2+N,67 To 11+N,Min(148,68+FY#)
  1603.          End If 
  1604.          Ink 0 : Bar 5+N,53 To 203+N,62 : Bar 5+N,153 To 253+N,162
  1605.          Ink 2 : Text 5+N,60,Left$(DEV$,24) : Text 5+N,160,FILE$
  1606.       End If 
  1607.    End If 
  1608.    '
  1609.    If X>1 and X<12 and Y>66 and Y<149 and FILEANZ#>10
  1610.       Add Y,-67
  1611.       If Y>FY#
  1612.          FX#=FX#+FYX#
  1613.          FY#=FY#+FYX#
  1614.          FX#=Min(FY#-FYX#,FX#)
  1615.          Add FPOS,10
  1616.       End If 
  1617.       If Y<FX#
  1618.          FY#=FY#-FYX#
  1619.          FX#=FX#-FYX#
  1620.          FX#=Max(0,FX#)
  1621.          Add FPOS,-10
  1622.       End If 
  1623.       FPOS=Min(FILEANZ#-9,FPOS)
  1624.       FPOS=Max(0,FPOS)
  1625.       Ink 0 : Bar 2+N,67 To 11+N,148
  1626.       Ink 2 : Bar 2+N,Min(148-FYX#,FX#+67) To 11+N,Min(148,FY#+67)
  1627.       Ink 0 : Bar 23+N,66 To 252+N,148
  1628.       Ink 2
  1629.       For I=0 To 9
  1630.          Text 23+N,I*8+74,LSFILE$(FPOS+I)
  1631.       Next I
  1632.    End If 
  1633.    If X>1 and X<255 and Y>151 and Y<164
  1634.       G[0+N,152,254+N,163,1]
  1635.       N$=FILE$
  1636.       Repeat 
  1637.          N1=0
  1638.          Ink ,1 : Text 5+N+Len(N$)*8,160," "
  1639.          Ink 2,0
  1640.          While N1=0 : N1=Asc(Inkey$) : Wend 
  1641.          If N1<>44 and N1>31 and Len(N$)<29
  1642.             N$=N$+Chr$(N1)
  1643.          End If 
  1644.          If N1=8 and Len(N$)>0
  1645.             N$=Left$(N$,Len(N$)-1)
  1646.          End If 
  1647.          Ink 0 : Bar 1+N,153 To 253+N,162
  1648.          Ink 2 : Text 5+N,160,N$
  1649.       Until N1=13
  1650.       If Len(N$)>0 : FILE$=N$ : End If 
  1651.       Text 5+N,160,FILE$
  1652.       G[0+N,152,254+N,163,0]
  1653.    End If 
  1654.    Repeat : Until Mouse Key=0
  1655. End Proc
  1656. Procedure LD_SV[N]
  1657.    Ink 0 : Bar N,52 To 254+N,163
  1658.    G[0+N,52,204+N,63,0] : G[207+N,52,254+N,63,0]
  1659.    G[0+N,65,15+N,150,0] : G[17+N,65,254+N,150,0]
  1660.    G[0+N,152,254+N,163,0]
  1661.    Ink 2 : Text 5+N,60,Left$(DEV$,24)
  1662.    Text 212+N,60,"Devs:"
  1663.    Text 5+N,160,FILE$
  1664.    For I=0 To 9
  1665.       Text 23+N,I*8+74,LSFILE$(I)-Chr$(255)
  1666.    Next I
  1667.    Y#=Max(1,FILEANZ#/10)
  1668.    FY#=81/Max(1,Y#)
  1669.    Ink 0 : Bar 2+N,67 To 11+N,148
  1670.    Ink 2 : Bar 2+N,67 To 11+N,Min(148,68+FY#)
  1671.    Screen Display 1,128,64,,166
  1672.    Screen Display 2,128,50,,
  1673. End Proc
  1674. Procedure G[X,Y,X2,Y2,N]
  1675.    If N=0 Then I=1 : I2=2 Else I=2 : I2=1
  1676.    Ink I : Draw X,Y To X2-1,Y : Draw X,Y To X,Y2
  1677.    Ink I2 : Draw X+1,Y2 To X2,Y2 : Draw X2,Y To X2,Y2
  1678.    Ink 1,0
  1679. End Proc
  1680. Procedure SETCOMMENT[N$]
  1681.    If E<>0 Then Pop Proc
  1682.    '
  1683.    N$=Chr$($9B)+"3;33m"+N$+" created with AIFFpaint by Volker Stepprath of Testaware !"+Chr$($9B)+"0m"+Chr$(0)
  1684.    F$=DEV$+FILE$+Chr$(0)
  1685.    '
  1686.    Dreg(1)=Varptr(F$)
  1687.    Dreg(2)=Varptr(N$)
  1688.    LVOSETCOMMENT=Doscall(-180)
  1689. End Proc
  1690. Procedure FEHLER
  1691.    Screen Display 1,128,64,,180
  1692.    Screen Display 2,128,50,,
  1693.    Screen To Front 2
  1694.    Screen To Front 1
  1695.    Screen 1
  1696.    Screen Show 
  1697.    Ink 0 : Bar 0,167 To 639,178
  1698.    G[0,167,639,178,0]
  1699.    E=Errn
  1700.    If E=31 Then N$="IFF compression not recognised !"
  1701.    If E=48 Then N$="Out of memory !" : SCW=320 : SCH=200 : SCC=32 : SCM=0 : Screen Open 0,SCW,SCH,SCC,SCM : Flash Off : Curs Off : Get Palette 2 : Cls 0 : Screen To Back 0
  1702.    If E=66 Then N$="Sorry, I`m not perfect !" : Screen 0 : Get Block 2,0,0,10,10
  1703.    If E=81 Then N$=FILE$+" not found !"
  1704.    If E=84 Then N$="Disc is write protected !"
  1705.    If E=88 Then N$="Disc is full !"
  1706.    If E=89 Then N$=FILE$+" is protected against deletion !"
  1707.    If E=90 Then N$=FILE$+" is protected against writing !"
  1708.    If E=91 Then N$=FILE$+" is protected against reading !"
  1709.    If E=94 Then N$="I/O Error !"
  1710.    If E=95 Then N$=FILE$+" is not an IFF picture"
  1711.    If N$="" Then N$="Error #"+Str$(E)-" "+"! ... ( don`t use it like you do it ! )"
  1712.    N=Len(N$)/2*8
  1713.    Screen 1
  1714.    Text 320-N,175,N$
  1715.    Screen 0
  1716.    While Mouse Key<>0 : Wend 
  1717.    While Mouse Key=0 : Wend 
  1718.    Ink 0 : Bar 0,167 To 640,180
  1719.    Screen Display 1,128,64,,166
  1720.    Screen Display 2,128,50,,
  1721.    Resume Next 
  1722. End Proc
  1723.